package com.me.study.concurrent.threadLocal;

import spring.validation.Person;
import java.text.SimpleDateFormat;

/**
 * 此处测试 ThreadLocal常量，不可变的到底是什么？
 * 不变的是声明出来的命名空间（引用变量），变化的是指向堆里 new对象的引用
 *
 * @author ME
 * @date 2017年8月16日 下午5:46:46
 */
public class TestThreadLocal {

	/**
	 * 阿里开发手册中，正确的使用 ThreadLocal 包装 SimpleDateFormat
	 */
	private static final ThreadLocal FORMAT_LOCAL = new ThreadLocal<SimpleDateFormat>(){
		@Override
		protected SimpleDateFormat initialValue() {
			return new SimpleDateFormat("yyyy-MM-dd");
		}
	};

	private static final ThreadLocal<Person> HOLDER = new ThreadLocal<>();

	public static Person get() {
		return HOLDER.get();
	}

	public static void set(Person areaCode) {
		HOLDER.set(areaCode);
	}

	public static void remove() {
		HOLDER.remove();
	}

	public static void main(String[] args) {
//		System.out.println(TestThreadLocalReference.get().toString());//此时对象是null
		System.out.println("=============================================");

		Person p = new Person("Jack");
		TestThreadLocal.set(p);
		System.out.println(TestThreadLocal.get().getName());
		System.out.println(p.toString());
		System.out.println("=============================================");
		System.out.println(TestThreadLocal.get().toString());
	}

}
